home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / hamradio / tnos-2.000 / tnos-2 / sounds.c < prev    next >
C/C++ Source or Header  |  1996-07-18  |  4KB  |  228 lines

  1. #include "global.h"
  2. #include "commands.h"
  3. #include "socket.h"
  4.  
  5. #if !defined(_lint) && !defined(MSDOS)
  6. static char rcsid[] OPTIONAL = "$Id: sounds.c,v 1.7 1996/07/19 00:46:20 root Exp root $";
  7. #endif
  8.  
  9. #ifdef SOUNDS
  10. struct sounds {
  11.     const char *name;        /* name of the sound */
  12.     char *cmd;            /* command to be executed to produce the sound */
  13.     const char *description;    /* description of what the sound is for */
  14.     struct sounds *next;        /* linked list */
  15. };
  16.  
  17. #define NULLSOUND ((struct sounds *)0)
  18.  
  19. static struct sounds *snds = NULLSOUND;
  20.  
  21.  
  22. static void showsound __ARGS((struct sounds *s));
  23. static struct sounds *findsound __ARGS((const char *name));
  24. static struct sounds *newsound __ARGS((const char *name));
  25. int dosounddefine __ARGS((int argc,char *argv[],void *p));
  26. static int dosoundplay __ARGS((int argc,char *argv[],void *p));
  27. static int dosoundlist __ARGS((int argc,char *argv[],void *p));
  28. static int dosounddelete __ARGS((int argc,char *argv[],void *p));
  29.  
  30.  
  31. /* sounds subcommand table */
  32. static struct cmds SOUNDtab[] = {
  33.     { "define",        dosounddefine,        0, 0, NULLCHAR },
  34.     { "delete",        dosounddelete,        0, 2, "sounds delete \"soundname\"" },
  35.     { "list",        dosoundlist,        0, 0, NULLCHAR },
  36.     { "play",        dosoundplay,        0, 2, "sounds play \"soundname\"" },
  37.     { NULLCHAR,        NULL,            0, 0, NULLCHAR }
  38. };
  39.  
  40.  
  41. int
  42. dosounds(argc,argv,p)
  43. int argc;
  44. char *argv[];
  45. void *p;
  46. {
  47.     return subcmd(SOUNDtab,argc,argv,p);
  48. }
  49.  
  50.  
  51. static void
  52. showsound (s)
  53. struct sounds *s;
  54. {
  55.     tprintf ("UNIX Command %s: %s\n     \"%s\"\n",
  56.         (s->description) ? s->description : "for sound",
  57.         s->name, (s->cmd == NULLCHAR || !*s->cmd) ?
  58.         "(none)" : s->cmd);
  59. }
  60.  
  61.  
  62. int
  63. dosounddefine(argc,argv,p)
  64. int argc;
  65. char *argv[];
  66. void *p OPTIONAL;
  67. {
  68. struct sounds *s;
  69.  
  70.     if (argc > 4 || argc < 2)    {
  71.         tprintf ("Usage: sounds define \"soundname\" [\"soundcommand\" [\"sounddescription\"]]\n");
  72.         return 0;
  73.     }
  74.     
  75.     s = findsound (argv[1]);
  76.  
  77.     if (argc < 3 && s == NULLSOUND)    {
  78.         tprintf ("Sound '%s' not defined!\n", argv[1]);
  79.         return 0;
  80.     }
  81.  
  82.     if (s == NULLSOUND)
  83.         s = newsound (argv[1]);
  84.  
  85.     if (argc == 2)    {
  86.         showsound (s);
  87.         return 0;
  88.     }
  89.     
  90.     if (s->cmd != NULLCHAR)
  91.         free (s->cmd);
  92.     s->cmd = strdup (argv[2]);
  93.  
  94.     if (argc > 3)    {
  95.         if (s->description != NULLCHAR)
  96.             free (s->description);
  97.         s->description = strdup (argv[3]);
  98.     }
  99.     return 0;
  100. }
  101.  
  102.  
  103. static int
  104. dosoundplay(argc,argv,p)
  105. int argc OPTIONAL;
  106. char *argv[];
  107. void *p OPTIONAL;
  108. {
  109.     if (!playsound (argv[1]))
  110.         tprintf ("Sound '%s' not defined!\n", argv[1]);
  111.     return 0;
  112. }
  113.  
  114.  
  115. static int
  116. dosoundlist(argc,argv,p)
  117. int argc OPTIONAL;
  118. char *argv[] OPTIONAL;
  119. void *p OPTIONAL;
  120. {
  121. struct sounds *s;
  122.  
  123.     for (s = snds; s; s = s->next)
  124.         showsound (s);
  125.     return 0;
  126. }
  127.  
  128.  
  129. static int
  130. dosounddelete(argc,argv,p)
  131. int argc OPTIONAL;
  132. char *argv[];
  133. void *p OPTIONAL;
  134. {
  135. struct sounds *s = snds, *tmp = NULLSOUND;
  136.  
  137.     if (s && !stricmp (s->name, argv[1]))    {
  138.         tmp = s;
  139.         snds = s->next;
  140.     } else for (; s && s->next; s = s->next)    {
  141.         if (!stricmp (s->next->name, argv[1]))    {
  142.             tmp = s->next;
  143.             s->next = tmp->next;
  144.             break;
  145.         }
  146.     }
  147.  
  148.     if (tmp)    {
  149.         if (tmp->name)
  150.             free (tmp->name);
  151.         if (tmp->cmd)
  152.             free (tmp->cmd);
  153.         if (tmp->description)
  154.             free (tmp->description);
  155.         tprintf ("Sound '%s' Deleted!\n", argv[1]);
  156.     }
  157.     return 0;
  158. }
  159.  
  160.  
  161. static struct sounds *
  162. findsound (name)
  163. const char *name;
  164. {
  165. struct sounds *s;
  166.  
  167.     if (name && *name)    {
  168.         for (s = snds; s; s = s->next)    {
  169.             if (!strnicmp (name, s->name, strlen (name)))
  170.                 return s;
  171.         }
  172.     }
  173.     return NULLSOUND;
  174. }
  175.  
  176.  
  177. static struct sounds *
  178. newsound (name)
  179. const char *name;
  180. {
  181. struct sounds *s;
  182.  
  183.     s = callocw (1, sizeof(struct sounds));
  184.     s->next = snds;
  185.     snds = s;
  186.     s->name = strdup (name);
  187.     return s;
  188. }
  189.  
  190.  
  191. int
  192. playsound (name)
  193. const char *name;
  194. {
  195. char *buf;
  196. struct sounds *s;
  197.  
  198.     if ((s = findsound (name)) != NULLSOUND)    {
  199.         if (s->cmd == NULLCHAR || !*s->cmd)
  200.             return 0;
  201.         buf = malloc (strlen(s->cmd) + 18);
  202.         sprintf (buf, "(%s &) 2>/dev/null", s->cmd);
  203.         (void) system (buf);
  204.         return 1;
  205.     } else
  206.         return 0;
  207. }
  208.  
  209.  
  210. int
  211. setsoundstr(argc,argv,sound)
  212. int argc;
  213. char *argv[];
  214. char **sound;
  215. {
  216.     if(argc < 2)    {
  217.         if (*sound)
  218.             tprintf ("%s\n", *sound);
  219.     } else {
  220.         if (*sound)
  221.             free (*sound);
  222.         *sound = strdup (argv[1]);
  223.     }
  224.     return 0;
  225. }
  226.  
  227. #endif /* SOUNDS */
  228.